﻿using System;
using System.IO;
using System.Windows;
using System.Xml.Linq;

namespace IBoLT
{
	// Класс для хранения текстуры и настроек её создания
	public class TextureSettings
	{
		#region Поля
		
		// Текстура
		private System.Drawing.Bitmap texture;
		// Размер текстуры
		private int width;
		private int height;
		// Название текстуры
		private String nameTexture;

		// XML-документ с параметрами текстуры
		public XDocument Settings = new XDocument(
				new XDeclaration("1.0", "utf-8", "yes"),
				new XElement("Текстура",
					new XAttribute("Название", "Текстура"),
					new XAttribute("Ширина", 300),
					new XAttribute("Высота", 300)));
		
		#endregion

		#region Свойства

		public System.Drawing.Bitmap Texture
		{
			get { return texture; }
			set {
				texture = value;
				
				if (width != texture.Width && height != texture.Height)
				{
					width = texture.Width;
					height = texture.Height;

					Settings.Root.Attribute("Ширина").SetValue(width);
					Settings.Root.Attribute("Высота").SetValue(height);
				}
			}
		}

		public int Width
		{
			get { return width; }
		}

		public int Height
		{
			get { return height; }
		}

		public String NameTexture
		{
			get { return nameTexture; }
			set
			{
				if (nameTexture != value)
				{
					nameTexture = value;
					Settings.Root.Attribute("Название").SetValue(nameTexture);
				}
			}
		}

		#endregion

		#region Методы

		public TextureSettings() { }
		public TextureSettings(String name, System.Drawing.Bitmap texture)
		{
			this.texture = texture;
			width = this.texture.Width;
			height = this.texture.Height;
			nameTexture = name;

			Settings.Root.Attribute("Ширина").SetValue(width);
			Settings.Root.Attribute("Высота").SetValue(height);
			Settings.Root.Attribute("Название").SetValue(nameTexture);
		}

		~TextureSettings()
		{
			texture.Dispose();
		}

		public void SaveSettingsToFile()
		{
			String path = "Textrures";
			if (!(Directory.Exists(path))) 
			{
				try
				{
					Directory.CreateDirectory(path);
				}
				catch (Exception error)
				{
					MessageBox.Show(error.Message);
				}
			}

			Settings.Save(path + "/" + nameTexture + ".xml");
		}
		public void SaveSettingsToFile(String fileName)
		{
			Settings.Save(fileName);
		}
		public void SaveSettingsToFile(String path, String fileName)
		{
			if (!(Directory.Exists(path)))
			{
				try
				{
					Directory.CreateDirectory(path);
				}
				catch (Exception error)
				{
					MessageBox.Show(error.Message);
				}
			}

			Settings.Save(path + fileName);
		}

		#endregion
	}
}